if (baddie_pause) { if ((sublev == 1) && pz_gt(0xe680 << 16)) baddie_pause = 0, sublev = 2; } } else if (level == LEVEL_33A) { if(baddie_pause && sublev==1 && pz_gt(240 << 19) ) { sublev = 2; baddie_pause = 0; spcbrk[2]->dtype = BRK_SOLID; } } else if(level==LEVEL_41 OR level==LEVEL_42) { if (level == LEVEL_42) { spcbrk[2]->dtype = BRK_SOLID; } if(baddie_pause) { if((sublev == 0) && pz_gt(0x0000 << 16)) { if (level == LEVEL_41) { spcbrk[2]->dtype = BRK_SOLID; baddie_pause = 0, sublev++; } } } set_41train_door(); } else if(level==LEVEL_51) { levels_logic_51(); } else if(level==LEVEL_63) { set_door_63(); } else if (level == LEVEL_66) { if (baddie_pause) { if (px_lt(570 << 19)) baddie_pause = 0, spcbrk[2]->dtype = BRK_SOLID; } } } //**************************************************************************** void handle_items() { int i; int type; MOB *m; m=(MOB*)&items; for(i=0;itype)==-1) continue; if(hand_items_jmp[type]==0) handle_movables(m); else (*hand_items_jmp[type])(m); } } //**************************************************************************** void handle_fxsprs() { int i; int type; MOB *m; m=(MOB*)&fxspr; for(i=0;itype)==-1) continue; if(hand_fxspr_jmp[type]!=0) (*hand_fxspr_jmp[type])(m); } } //**************************************************************************** extern MTXTR_LINK *obj_free_tx_link; extern int scaletimer; void output_items() { int i,j; int type; MOB *m; char used[NITEMS]; if ( (can_pick[0] == -1) && (can_pick[1] == -1) ) { scaletimer = 0; } else { scaletimer ++; } set_memory(used,0,NITEMS); for(i=0;itype)==-1) continue; if(used[i]) continue; if (type != 0x69) // ??? { j = 2; } if(outp_items_jmp[type]!=0) { (*outp_items_jmp[type])(m); } else { output_other_items(m); } } } //**************************************************************************** void output_fxsprs() { int i; int type; MOB *m; m=(MOB*)&fxspr; for(i=0;itype)==-1) continue; //if (type == OD_SMOKE1 || type == OD_SMOKE2) continue; if(outp_fxspr_jmp[type]!=0) (*outp_fxspr_jmp[type])(m); else output_fxsprite(m); } } //**************************************************************************** void damage_mob(int i,MOB *w) { BRKOBJ *brk=&brktab[i]; MOB *m; int dp[4]; int type; m=brk->mp; type=w->type; if(type==OD_VAN2BODa) return; if(type==OD_BIKE) return; if( (type>=OD_PISTOL2 && type<=OD_PISTOL6) OR type==OD_SHOTGUN1) { } else { brk->hp=-1; } dp[X]=w->x; dp[Y]=w->y; dp[Z]=w->z; (*brkhandler[brk->dtype])(brk,m,dp,0); } //**************************************************************************** void knock_down_object(int pnum,int det) { int i; int x,z; int dp[4]; MOB *m,*mp; set_detect_point(pnum,det,dp); // make_hit_fx2(dp[X],dp[Y],dp[Z],0); // Detection frig. x=dp[X]>>16; z=dp[Z]>>16; for(i=0,m=&mobs[0];itype!=OD_WALLTV1 && m->type!=OD_WALLTV2) continue; if(get_dist(x,z,m->x>>16,m->z>>16) < 0xc0) { if(m->type==OD_WALLTV1 OR m->type==OD_WALLTV2) { play_sfx(SMP_21SUSP,255,0x1800); // play_sfx(SMP_EXPLO1,128,0x1800); create_fx(OD_EXP_S,m->x,m->y,m->z); shaker=8; dual_rumble (RFX_EXP); i=create_weapon(OD_INFOSCRN,m->x,m->y,m->z,0); mp=&items[i]; mp->spd=64; mp->ysp=32; if(m->type==OD_WALLTV1) m->xa=0xc000; else m->xa=0x8000; mp->xa+=-0x1000+(